#ifndef GM_CRYPTO_H
#define GM_CRYPTO_H

#include <stddef.h>
#include <openssl/evp.h>

#ifdef __cplusplus
extern "C" {
#endif

/* 初始化（内部选择 SM3 或 回退 SHA256） */
int gm_crypto_init(void);

/* 释放全局资源（可选） */
void gm_crypto_cleanup(void);

int gm_sm2_sign(EVP_PKEY *pkey, const unsigned char *msg, size_t msglen,
            const char *sm2_id, unsigned char **sig, size_t *siglen);

int gm_sm2_verify(EVP_PKEY *pub, const unsigned char *msg, size_t msglen,
            const char *sm2_id, const unsigned char *sig, size_t siglen);

/* 把二进制签名转 base64（返回 malloc 字符串，caller free） */
char *gm_sig_base64(const unsigned char *sig, size_t sig_len);

/* base64 解码（返回 malloc buf，长度写到 out_len，caller free） */
unsigned char *gm_base64_decode(const char *b64, size_t *out_len);

#ifdef __cplusplus
}
#endif

#endif /* GM_CRYPTO_H */